package LMR.rbac.view;

import LMR.rbac.dto.Userdto;
import LMR.rbac.service.Userservice;
import LMR.rbac.vo.DeptVo;
import LMR.rbac.vo.Result;
import LMR.rbac.vo.RoleVo;
import LMR.rbac.vo.UserVo;

public class Userview {
        public static UserVo[] cache;

    public static void show() {
        String menuChoice;
        do {
            printMenu();
            menuChoice = Mainview.input.nextLine();
            switch (menuChoice) {
                case "0" -> System.out.println("已返回上一级菜单！");
                case "1" -> list();
                case "2" -> create();
                case "3" -> update();
                case "4" -> toggle();
                default -> System.out.println("输入非法，请输入正确的菜单编号！");
            }
        } while (!"0".equals(menuChoice));
    }


    public static void printMenu() {
        String menu = """
                ---------------
                    用户管理
                ---------------
                |  0  返回上级  |
                |  1  用户列表  |
                |  2  创建用户  |
                |  3  更新用户  |
                |  4  切换状态  |
                ---------------
                请输入选项：""";

        System.out.print(menu);


    }
    public static void printError(String message) {
        System.out.println("\033[31m"+message+"\033[0m");
    }
    public static void list(){
        Result result= Userservice.list();
        cache=(UserVo[]) result.data;
        System.out.println("ID\t用户名\t姓名\t手机号\t邮箱\t部门名称\t角色名称\t状态");
        for (UserVo user : cache){
            System.out.printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",user.id,user.username,user.name,user.mobile,user.email,user.deptName,user.roleName,user.enabled?"启用":"禁用");
        }
    }
    public static void create() {
        System.out.print("请输入用户名：");
        String username=Mainview.input.nextLine();
        System.out.print("请输入姓名：");
        String name=Mainview.input.nextLine();
        System.out.print("请输入手机号：");
        String mobile=Mainview.input.nextLine();
        System.out.print("请输入邮箱：");
        String email=Mainview.input.nextLine();
        System.out.println("请选择部门ID：");
        int deptID=0;
        do {
            Deptview.list();
            if (Deptview.cache==null||Deptview.cache.length==0){
                printError("部门列表为空，请先创建部门！");
                return;
            }
            DeptVo dept=Deptview.getCachceById();
            if (dept!=null){
                deptID=dept.id;
            }
        }while (deptID==0);
        System.out.println("请选择角色ID：");
        int roleID=0;
        do {
            Roleview.list();
            if (Roleview.cache==null||Roleview.cache.length==0){
                printError("角色列表为空，请先创建角色！");
                return;
            }
            RoleVo role=Roleview.getCachceById();
            if (role!=null){
                roleID=role.id;
            }
        }while (roleID==0);
        Userdto dto=new Userdto(username,name,mobile,email,deptID,roleID);
        Result result= Userservice.create(dto);
        if (!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();
    }
    public static void update(){
        UserVo user=getCachceById();
        if (user==null){
            return;
        }
        System.out.print("请输入用户名：按回车不修改:");
        String username=Mainview.input.nextLine();
        username="".equals(username)?user.username:username;
        System.out.print("请输入姓名：按回车不修改:");
        String name=Mainview.input.nextLine();
        name="".equals(name)?user.name:name;
        System.out.print("请输入手机号：按回车不修改:");
        String mobile=Mainview.input.nextLine();
        mobile="".equals(mobile)?user.mobile:mobile;
        System.out.print("请输入邮箱：按回车不修改:");
        String email=Mainview.input.nextLine();
        email="".equals(email)?user.email:email;
        System.out.println("请选择部门ID：");
        int deptID=0;
        do {
            Deptview.list();
            if (Deptview.cache==null||Deptview.cache.length==0){
                printError("部门列表为空，请先创建部门！");
                return;
            }
            DeptVo dept=Deptview.getCachceById();
            if (dept!=null){
                deptID=dept.id;
            }
        }while (deptID==0);
        System.out.println("请选择角色ID：");
        int roleID=0;
        do {
            Roleview.list();
            if (Roleview.cache==null||Roleview.cache.length==0){
                printError("角色列表为空，请先创建角色！");
                return;
            }
            RoleVo role=Roleview.getCachceById();
            if (role!=null){
                roleID=role.id;
            }
        }while (roleID==0);
        Userdto dto=new Userdto(username,name,mobile,email,deptID,roleID);
        Result result= Userservice.update(dto,user.id);
        if (!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();
    }
    public static void toggle(){
        UserVo user=getCachceById();
        if (user==null){
            return;
        }
        if (user.enabled){
            System.out.print("是否禁用该用户？(y/n)：");
        }
        else{
            System.out.print("是否启用该用户？(y/n)：");
        }
        String confirm=Mainview.input.nextLine();
        if (!"y".equalsIgnoreCase(confirm)){
            System.out.println("已取消操作！");
            return;
        }
        Result result= Userservice.toggle(user.id);
        if (!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();
    }
    public static UserVo getCachceById(){
        System.out.print("请输入部门ID,ID必须大于0且是整数:");
        if (!Mainview.input.hasNextInt()){
            Mainview.input.nextLine();
            printError("输入非法，请输入正确的部门ID");
            return null;
        }
        int id=Integer.parseInt(Mainview.input.nextLine());
        if (id<1){
            printError("输入非法，请输入正确的部门ID");
            return null;
        }
        if (cache==null){
            Result result= Userservice.list();
            cache=(UserVo[]) result.data;
        }
        UserVo user=null;
        for (UserVo userVo:cache){
            if (userVo.id==id){
                user=userVo;
                System.out.println("该ID对应的数据是：");
                System.out.printf("ID：%d,用户名：%s,姓名：%s,姓名：%s,姓名：%s,姓名：%s,姓名：%s,姓名：%s,姓名：\n",
                        userVo.id,userVo.username,userVo.name,userVo.mobile,userVo.email,userVo.deptName,userVo.roleName,userVo.enabled?"启用":"禁用");
                break;
            }

        }
        if (user==null){
            printError("没有该ID对应的数据");
            return null;
        }
        return user;
    }
}
